Les IA sont souvent présentées comme des boîtes noires, ce qui est partiellement vrai… et donc aussi partiellement faux. Plutôt que d’ouvrir la boîte et d'essayer de comprendre comment ça marche, prenons le problème à l’envers. Créons notre propre boîte noire intelligence artificielle. Pour y arriver, 10 lignes de code suffisent, même avec des dizaines de neurones et plusieurs couches. On vous détaille le principe, étape par étape.
Après avoir détaillé le fonctionnement d’un neurone artificiel, nous allons en utiliser plusieurs pour créer et entrainer une intelligence artificielle. C’est à la portée de tous, sans avoir besoin de connaissances ou d’installer des programmes en particulier. Une connexion à Internet et un navigateur sont suffisants.
Première étape : un notebook sur Google Colab
Dans le cadre de notre petite démonstration, nous utilisons Google Colab (Colaboratory), un compte Google sera donc nécessaire. Colab permet d’héberger sur les serveurs de Google des notebooks Jupyter. On peut y écrire du code Python et l’exécuter directement depuis son navigateur, sur les serveurs de Google. Le fonctionnement est très simple et vous pouvez aussi utiliser d’autres notebooks si vous le désirez.
Google Colab dispose de tout ce dont nous avons besoin pour nous lancer dans l’intelligence artificielle. Il permet aussi d’exécuter notre code, au choix, sur des CPU, des GPU ou des TPU (Tensor Processing Unit pensés pour l’intelligence artificielle).
Une fois sur le site de Google Colab, cliquez sur « New Notebook » pour arriver sur un notebook vierge où il suffit de copier/coller les lignes de code que nous allons vous donner et expliquer.
Tensorflow, keras et un jeu de données (MNIST)
Remarque très importante pour ce petit tuto : nous allons à peine effleurer le développement d’une intelligence artificielle, mais nous aurons l’occasion de rentrer davantage dans les détails par la suite. On s’est dit que commencer par la partie pratique avant de se pencher sur la théorie (les calculs de matrices, les dérivées…) pourrait vous permettre de directement mettre les mains dans le cambouis et de comprendre, dans les grandes lignes, comment fonctionne une IA.
Bien évidemment, nous allons nous appuyer sur des bibliothèques existantes pour créer notre IA, on ne part pas d’une feuille blanche. Première chose dont nous avons besoin : Tensorflow, un outil open source d'apprentissage automatique développé par Google. Deuxième élément qui va avec le premier : keras, une « API de haut niveau de TensorFlow permettant de créer et d'entraîner des modèles de deep learning ».
Enfin, il nous faut des données, un élément indispensable pour une intelligence artificielle, comme on le répète à longueur d’actu sur les IA. Par défaut, une intelligence artificielle ne sait rien faire. Nous allons en développer une capable de reconnaitre des chiffres de 0 à 9. Il faut donc d’abord lui donner des séries d’images étiquetées, c’est-à-dire avec une légende précisant quel chiffre se trouve dans l’image.
Nous utilisons pour cela la base de données MNIST (Modified ou Mixed National Institute of Standards and Technology). Elle comprend 60 000 images d'apprentissage et 10 000 images de test pour vérifier les performances de son programme. Les images sont en noir et blanc et de petite taille (28 x 28 pixels).
Et si on se lançait ? Trois lignes pour préparer le terrain
Abonnez-vous pour tout dévorer et ne rien manquer.
Déjà abonné ? Se connecter
Commentaires (25)
#1
Mais désolé, vous avez ainsi créé une boîte noire : comment comprendre ce que l'IA a appris ? Comment savoir l'influence de tel paramètre sur sa méthode ?
#1.1
Comme indiqué au début, c’est ici un cas pratique pour une première approche.
Dans la suite du dossier on va pouvoir détailler un peu plus la gestion des paramètres (poids et biais) et le travail des epoch, etc. (à voir si je me lance dans les dérivées, descente de gradient, minimum local…)
#2
En tout cas, pour l’article !
#3
C'est précisément pour ça que j'ai opté pour faire tourner du modèle en local au tout début où j'ai mis les pattes dans SD.
Marre de filer des données à Google.
#3.1
#4
#5
Juste une petite remarque sur "Pour rappel, les tableaux en informatique commencent à 0" pas d'accord, cela dépend du langage utilisé :)
C'est d'ailleurs une source fréquente d'erreur avec les jeunes qui n'ont appris que le JAVA par exemple.
#5.1
VB6, tu me manques pas.
Tes tableaux qui commencent à 1 et tes collections à 0 ...
#5.3
P'tain y a des jours où je suis bien content d'avoir changé de métier ^^
#5.2
Mais pour modérer ton tacle, y a pas que les jeunes de java hein, les "seniors" qui jonglent entre les langages font aussi la bourde dans un sens ou dans l'autre ;) En tout cas moi ça m'est arrivé plus d'une fois!
(Entre ça les noms de type de variables qui ne désignent pas la même chose suivant les langages.. )
#5.4
un "senior" aura plus facilement une réponse genre "rha c'est vrai j'ai oublié" alors que le jeune c'est souvent "ha bon ça commence pas à 0 ?"
#5.5
#5.6
Mais dans les languages les plus utilisés actuellement (https://www.statista.com/statistics/793628/worldwide-developer-survey-most-used-languages/), dans ceux qui font plus de 10%, je ne vois que SQL qui utilise des tableaux basé à 1. Et encore, SQL n'est pas considéré par tout le monde comme un langage de programmation.
Dans les 20 premier de ce tableaux, on ne trouve que lua à la 17e place.
Bref, oui, c'était un raccourci de langage de dire que les tableaux comment à 0, mais dans la vie de tout les jours, c'est globalement le cas, sauf dans les banques et pour les scientifiques.
#5.7
Merci de vos retours !
#6
Juste une remarque pour le dev du site, est-il possible d'avoir les blocs de code en mono et la coloration ? C'est plus facile de lire du code. Surtout que ce n'est pas très compliqué il y a pleins de libs pour ça. 😅
#7
https://fidle.cnrs.fr/w3/whatsup.html
#8
Le faire entièrement à la main permet de comprendre comment les choses fonctionnent à l'intérieur de la boite. Là, tout se fait tout seul dans la boite, juste avec une commande.
Ca peut même être fait avec sur papier, dans la même veine : reconnaissance des chiffres sur une grille de 3x5, ou même juste 7 neurones d'entrés, représentant un afficheur 7 segments. Faire le réseau complet, et plusieurs epoch à la main, avec le calcul des poids et tout, ça, ça permet de comprendre en détail comment ça fonctionne.
Cet article est utile après : mettre derrière deux commandes ce qu'on sait déjà faire.
#8.1
#8.3
Parce que là, je pense que personne ne sait ce qu'est la descente de gradient :)
Tu t'es attelé à une tâche compliquée, c'est ta faute aussi
#8.4
Bah si 😝
#8.7
#8.8
#8.5
J'aime bien présenter la descente de gradient ainsi :
Imaginez-vous une machine. Cette machine, elle prend des valeurs en entrée et donne une valeur en sortie. On affiche à côté de cette valeur en sortie, la différence (l'erreur) entre la valeur que la machine a donnée et celle que l'on souhaite qu'elle donne.
Sur cette machine, il y a plein de potentiomètre que l'on peut tourner dans un sens ou dans l'autre. En ce faisant, ça change la valeur de sortie, et donc l'erreur.
On teste chaque potentiomètre, seul, pour savoir dans quel sens il faut les tourner pour baisser l'erreur, et à quelle vitesse elle fait baisser l'erreur, et on les remet à leur position d'origine. Une fois fait, on tourne tous les potentiomètres dans le sens qui fait baisser l'erreur et d'un pas correspondant à la vitesse de sa diminution.
Et on recommence ça jusqu'à estime que c'est bon.
#8.6
Ce que je décris, c'est plus donner un sens de ce qui se passe, et le faire manuellement pour comprendre pourquoi, à la fin, dans la vie réelle, c'est une boite noire. Se rendre compte qu'avec 7 entrées, une couche intermédiaires de 7 neurones, et 10 sorties, c'est déjà extrêmement compliqué 1. de le faire à la main, et 2. on a pas la moindre idée de pourquoi, à la fin, tel poids a une valeur quelconque.
Ce que je veux dire, c'est que la précision de l'explication importe moins que donner un sens, une intuition, de ce qui se passe, tant que les personnes en sont conscientes.
J'avais utilisé l'exemple d'une course de véhicule dans le désert dans le précédent article, mais ton exemple est plutôt bon. Le truc, c'est que pour moi (et je suppose donc, pleins de gens), tester soit même cette machine (ou, faire sur le papier, ou avec du code simple la même chose "manuellement", permet plus de comprendre que juste avec l'explication de comment fonctionne cette machine.
Bref, c'est pour ça que je trouve que passer directement à l'utilisation des APIs est dommageable. Mais en même temps, on pourrait voir ça comme "maintenant qu'on a vu ce que ça pouvait faire, rentrons dans le détail de comment ça fonctionne". C'est juste que ça me parait pas être l'ordre logique, c'tout :)
#8.2